package service;

import dao.JPADAOFactory;
import dao.exception.AlreadyEntityExistsException;
import dao.exception.NotEntityFoundException;
import entity.UsuarioRegistrado;
import javax.persistence.EntityManager;
import service.exception.DuplicateObjectException;
import service.exception.ObjectNotFoundException;
import valueObject.UsuarioRegistradoVO;

/**
 *
 * @author Juan Sebastian Hernández Serrato
 */
public class UsuarioRegistradoService extends AbstractService<UsuarioRegistradoVO, UsuarioRegistrado> {

    @Override
    public int create(UsuarioRegistradoVO valueObject, EntityManager em) throws DuplicateObjectException {
        UsuarioRegistrado usuarioRegistrado = valueObject.toEntity();
        try {
            usuarioRegistrado = JPADAOFactory.getInstance().getUsuarioRegistradoDAO().create(usuarioRegistrado, em);
            return usuarioRegistrado.getId();
        } catch (AlreadyEntityExistsException ex) {
            throw new DuplicateObjectException();
        }
    }

    @Override
    public UsuarioRegistradoVO findById(int id, EntityManager em) throws ObjectNotFoundException {
        try {
            return JPADAOFactory.getInstance().getUsuarioRegistradoDAO().findById(id, em).toValueObject();
        } catch (NotEntityFoundException ex) {
            throw new ObjectNotFoundException();
        }
    }

    @Override
    public void update(UsuarioRegistradoVO valueObject, EntityManager em) throws ObjectNotFoundException {
        try {
            UsuarioRegistrado usuarioRegistrado = JPADAOFactory.getInstance().getUsuarioRegistradoDAO().findById(valueObject.getId(), em);
            usuarioRegistrado = valueObject.toEntity();
            JPADAOFactory.getInstance().getUsuarioRegistradoDAO().update(usuarioRegistrado, em);
        } catch (NotEntityFoundException ex) {
            throw new ObjectNotFoundException();
        }
    }

    @Override
    public void delete(int id, EntityManager em) throws ObjectNotFoundException {
        try {
            UsuarioRegistrado usuarioRegistrado = JPADAOFactory.getInstance().getUsuarioRegistradoDAO().findById(id, em);
            JPADAOFactory.getInstance().getUsuarioRegistradoDAO().delete(usuarioRegistrado, em);
        } catch (NotEntityFoundException ex) {
            throw new ObjectNotFoundException();
        }
    }
    
    public void verificaUsuarioEnFormulario(UsuarioRegistradoVO usuarioRegistradoVO, EntityManager em) throws DuplicateObjectException{
        UsuarioRegistrado usuarioRegistrado = usuarioRegistradoVO.toEntity();
        try {
            JPADAOFactory.getInstance().getUsuarioRegistradoDAO().buscarInformacionEnFormulario(usuarioRegistrado, em);
        } catch (NotEntityFoundException ex) {
            return;
        }
        throw new DuplicateObjectException();
    }

}
